<?php

namespace RPPrincipal\PrincipalBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use RPPrincipal\PrincipalBundle\Entity\Principal;

class DefaultController extends Controller {

    public function indexAction() {

//        ini_set('max_execution_time', '2000');
//        ini_set('max_input_time', '-1');


        $usuario = $this->get('security.context')->getToken()->getUser();


//        $em = $this->getDoctrine()->getManager('sintys');
//        $query = $em->createQuery(
//                'SELECT count(p)
//    FROM SintysBundle:Personas p'
//        );
//
//        $cantidad = $query->getResult();
//        echo $cantidad[0][1] . "->";
//        $rango = range(0, $cantidad[0][1], 1000);
//        echo($rango[0]);
//
//        $query = $em->createQuery(
//                        'SELECT p
//    FROM SintysBundle:Personas p')
//                ->setMaxResults(200)
//                ->setFirstResult(0);
//
//        $cantidad2 = $query->getResult();
//        foreach ($cantidad2 as $_personaSintys) {
//            echo $_personaSintys->getDni();
//        }
//
//        //efficiant
//        for ($i = $start; $i < $end; $i+=$step) {
//            //do something with array
//        }


        return $this->render('PrincipalBundle:Default:index.html.twig', array(
                    'usuario' => $usuario,
        ));
    }

    public function importarSintysAction() {

        $usuario = $this->get('security.context')->getToken()->getUser();
//        $nombre = $usuario->getNombre();
//        ini_set('memory_limit', '-1');
//        set_time_limit(0);

        $personasSintys = $this->get('doctrine')
                ->getRepository('SintysBundle:Personas', 'sintys')
                ->findAll();

        if (!$personasSintys) {
            throw $this->createNotFoundException('Unable to find Sintys entity.');
        }

        $em = $this->getDoctrine()->getManager('default');

        $this->insertAuditoria($em, "Actualización Sintys", $usuario);

        foreach ($personasSintys as $_personaSintys) {

            $existe = $this->get('doctrine')
                    ->getRepository('PrincipalBundle:Principal', 'default')
                    ->findByDni($_personaSintys->getDni());
            if (!$existe) {
                $principal = new Principal();

                $principal->setDni($_personaSintys->getDni());
                $principal->setApellido($_personaSintys->getApellido());
                $principal->setNombre($_personaSintys->getNombre());
                $principal->setSexo($_personaSintys->getSexo()[0]);
                $principal->setFechaNacimiento($_personaSintys->getFechaNacimiento());
                $principal->setCantMod(0);


                $this->insertAuditoria($em, "Registro Nuevo con DNI: " . $_personaSintys->getDni(), $usuario);
            } else {
                $principal = $em
                        ->getRepository('PrincipalBundle:Principal', 'default')
                        ->findOneByDni($_personaSintys->getDni());

                $principal->setDni($_personaSintys->getDni());
                $_isMod = 0;
                if ($principal->getApellido() != $_personaSintys->getApellido()) {
                    $principal->setApellido($_personaSintys->getApellido());
                    $_isMod++;
                }
                if ($principal->getNombre() != $_personaSintys->getNombre()) {
                    $principal->setNombre($_personaSintys->getNombre());
                    $_isMod++;
                }
                if ($principal->getSexo() != $_personaSintys->getSexo()[0]) {
                    $principal->setSexo($_personaSintys->getSexo()[0]);
                    $_isMod++;
                }
                if ($principal->getFechaNacimiento() != $_personaSintys->getFechaNacimiento()) {
                    $principal->setFechaNacimiento($_personaSintys->getFechaNacimiento());
                    $_isMod++;
                }
                $cantMod = $principal->getCantMod() + 1;
                $principal->setCantMod($cantMod);

                if ($_isMod != 0) {
                    $this->insertAuditoria($em, "Registro Actualizado con DNI: " . $_personaSintys->getDni(), $usuario);
                } else {
                    continue;
                }
            }
            $em->persist($principal);
        }


        $em->flush();

        return $this->redirect($this->generateUrl('principal_homepage'));
    }

    public function pruebaAction(){
        $usuario = $this->get('security.context')->getToken()->getUser();
        return $this->redirect("/scripts/importarSintys.php?pAdeas=".$usuario->getId());

    }
    public function importarRPPAction() {

        $usuario = $this->get('security.context')->getToken()->getUser();
//        $nombre = $usuario->getNombre();
        $personasRPP = $this->get('doctrine')
                ->getRepository('RPPBundle:Personas', 'rpp')
                ->findAll();

        if (!$personasRPP) {
            throw $this->createNotFoundException('Unable to find RPP entity.');
        }
        $em = $this->getDoctrine()->getManager('default');

        $this->insertAuditoria($em, "Actualización PID", $usuario);

        //set_time_limit(5000);
//        ini_set('max_execution_time','2000');
//        ini_set('max_input_time', '-1');

        foreach ($personasRPP as $_personaRPP) {
            set_time_limit(0);
//            ini_set('max_execution_time', '2000');
//            ini_set('max_input_time', '2000');
//            ini_set('memory_limit', '256M');

            $existe = $this->get('doctrine')
                    ->getRepository('PrincipalBundle:Principal', 'default')
                    ->findByDni($_personaRPP->getNroDocumento());
            if (!$existe) {
                $principal = new Principal();
                $principal->setDni($_personaRPP->getNroDocumento());
                $principal->setApellido($_personaRPP->getApellido());
                $principal->setNombre($_personaRPP->getNombre());
                $principal->setSexo($_personaRPP->getSexo()[0]);
                $principal->setFechaNacimiento($_personaRPP->getFechaNacimiento());
                $principal->setCantMod(0);

                $this->insertAuditoria($em, "Registro Nuevo con DNI: " . $_personaRPP->getNroDocumento(), $usuario);
            } else {
                $principal = $em
                        ->getRepository('PrincipalBundle:Principal', 'default')
                        ->findOneByDni($_personaRPP->getNroDocumento());

                $principal->setDni($_personaRPP->getNroDocumento());
                $principal->setApellido($_personaRPP->getApellido());
                $principal->setNombre($_personaRPP->getNombre());
                $principal->setSexo($_personaRPP->getSexo()[0]);
                $principal->setFechaNacimiento($_personaRPP->getFechaNacimiento());
                $principal->setCantMod(1);

                $this->insertAuditoria($em, "Registro Actualizado con DNI: " . $_personaRPP->getNroDocumento(), $usuario);
            }
            $em->persist($principal);
        }



        $em->flush();

        return $this->redirect($this->generateUrl('principal_homepage'));
    }

    public function insertAuditoria($em, $accion, $usuario) {

        $auditoria = new \RPPrincipal\AuditoriaBundle\Entity\Auditoria();
//        $auditoria->setAccion("Actualización PID");
        //$auditoria->setAccion("Actualización Sitis");
        $auditoria->setAccion($accion);

        $auditoria->setFecha(new \DateTime(date("d-m-Y")));
        $auditoria->setHora(new \DateTime(date('H:m:s')));
        $auditoria->setIp($this->container->get('request')->getClientIp());
        $auditoria->setUsuario($usuario);
        $em = $this->getDoctrine()->getManager('default');
        $em->persist($auditoria);
    }

}
